【Python】lambda表达式、map函数、reduce函数、filter函数 您所在的位置:网站首页 python lambda return 【Python】lambda表达式、map函数、reduce函数、filter函数

【Python】lambda表达式、map函数、reduce函数、filter函数

2023-04-13 16:22| 来源: 网络整理| 查看: 265

分类:编程知识 04-11

一、lambda表达式

简单来说,所以只用一行或者一句话来表达的函数就可以用lambda表达式,也称为lambda函数;

【举个栗子】

def f(x):return x * xf(3)

上面的函数的含义是:给函数f传递一个参数x,它会返回x*x;所以我们传递给函数f一个实参3,它就返回3*3,也就是9;

现在我们将上面的代码改成lambda表达式:

# 如果将上面的函数转换成lambda表达式 # 具体格式:f = lambda x: x * x # 这里的f是函数名,所以调用该函数的时候就是函数名()print(f(5)) # 这里的f是函数名,所以调用该函数的时候就是函数名()# lambda之后写一个x表示输入; # 输入之后写输出,输入输出之间用英文的冒号:分开 # 冒号之后写 x*x 表示输出的结果是x*x # 所以函数 f = lambda x: x * x 的含义是,输入一个x输出结果为x*x

 可以看出来结果一样;

那lambda表达式除了输入一个数之外,还可以输入多个数吗?

当然可以!

这里我们输入两个数:

f = lambda x, y: x * y print(f(2, 3)) # 函数 f = lambda x, y: x * y 的含义是,输入一个x,y输出结果为x*y

lambda表达式还可以放进函数里进行嵌套;

【举个栗子】

实现计算a * x * x + b * x + c;

def quar(a, b, c):return lambda x: a * x * x + b * x + cf = quar(1, -1, 2) print(f(5))

# f = quar(1, -1, 2)表示给函数quar传递实参,此时a=1,b=-1,c=2

# print(f(5)) 表示输入的x为5;

注意 f = quar(1, -1, 2)只是给函数传递了实参,f(5)才是真正掉调用了该函数

二、Filter函数

filter 函数用于过滤元素,将 函数对象(function) 依次作用于 可迭代对象(iterable)的每个元素,将返回值为 True 的 元素组成一个 新的可迭代对象 返回。

(python3 统一返回迭代器;需要通过list函数,set函数将他们转换)

它的使用形式如下:

 filter(function, iterable)

# function 表示一个函数对象

# iterable表示一个可迭代对象

【代码演示】

num_list = [1, 2, 3, 4, 5, 8]def f(x):if x % 2 == 0:return xprint(list(filter(f, num_list)))

解释,如果输入的是偶数,返回该值;

将f函数改成lambda表达式:

num_list = [1, 2, 3, 4, 5, 8] print(list(filter(lambda x: x % 2 == 0, num_list))) 三、Map函数

Map函数通常有两个参数,第一个参数是函数对象,第二个参数就是可迭代对象;

Map函数的作用是,将可迭代对象的每一个元素都应用到第一个参数函数中;

 在上面这个图片,cook是一个函数对象,是一个可迭代对象,Map函数就是将可迭代对象中的每一个元素拿出来,放在cook这个函数对象里“执行”,将,变成了

【举个栗子】

num_list = [1, 2, 3, 4, 5] # 一个可迭代对象def duble(x):return x * 2result = map(duble, num_list) # print(result) # 直接输出map函数,输出的是一个迭代器 # 想要正常输出必须将它转换 print(list(result)) # print(result) # 直接输出map函数,输出的是一个迭代器

# 函数后面不加括号,表示它是整个函数体,是一个函数对象;

# 函数后面加括号(括号中必须传入实参),表示调用该函数的执行结果

四、Reduce函数

reduce() 函数会对参数序列中元素进行累积。

Reduce函数虽然和Map函数的参数形式比较类似,但它们有一些本质的区别;

是一个函数对象,是一个可迭代对象,它在运行的时候会这样操作:将后面列表中的两个元素作为一组参数传递给eat,接下来将这个生成的结果和下一个元素作为一组参数再传递给eat,以此类推,直到所有的元素都被传递,则生成最后的结果;

  

【举个栗子】

【代码演示】

from functools import reducedef add(x, y):return x + ynum_list = [1, 2, 3, 4, 5] print(reduce(add, num_list))

在Python3中,reduce函数已经不是一个内置函数,已经把它调整到一个模块(functools)中了,所以使用reduce函数的时候要进行导包;

reduce函数和其余两个函数的区别:

        使用map函数,结果是一个map对象;使用filter函数的时候,结果是一个filter对象,我们都需要使用list函数将他们转换为列表;

        而ruducr函数,他在add函数里的作用是求和最后生成的是一个和的结果,所以这里就直接输出流15,不需要进行转换。

我们最开始学了lambda表达式,只用一行就可以表达的函数都可以写成lambda表达式,显然,上面的add函数符合标准,我们将它改成lambda表达式:

from functools import reducenum_list = [1, 2, 3, 4, 5]result = reduce(lambda x, y: x + y, num_list) print(result)

 这样写代码更加简洁了,但是写代码也不是越简洁越好。

标签: 函数表达式reducelambdaPythonfilterMap

相关文章:

PHP安全有帮助的一些函数 04-13 JSON.parse 函数 (JavaScript) 04-13 python多线程处理数据 04-13 Python中 join() 函数的使用示例讲解 04-13 linux同时运行两个进程 04-13


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有